package br.com.vti.sisp_sicrim.antigo.controller.tela;

import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Calendar;

import br.com.caelum.vraptor.Result;
import br.com.vti.sisp_sicrim.antigo.util.Sessao;
import br.com.vti.sisp_sicrim.antigo.util.UtilBean;

/**
 * Classe responsavel por encapsular o tratamento e as consistencias da tela
 * Msgtm002
 * 
 * @author Incode - Data: mai/2014
 * 
 */
public class Msgtm002 {
	private boolean enviada = false;
	private String pagina = "/resources/antigo/jsp/Msgtm002.jsp";
	private String versao;
	private String operacao;
	private int dataCorrente;
	private String horaCorrente;
	private String msg1;
	private String msg2;
	private String msg3;
	private String empresa;
	private String nomeClasse;
	private int[] numero = new int[21];
	private String[] ativo = new String[21];
	private String[] userAtv = new String[21];
	private String[] traco = new String[21];
	private String[] opc = new String[21];
	private String mensagem = "";
	private String funcao = "0";
	private String campofocus = "opc[s]";
	private String navegar = "";
	private Boolean temMensagem = false;
	private Result result;
	private Sessao sessao;

	// Classes views
	// Classes includes
	public Msgtm002() {
		inicializar(false);
	}

	public Msgtm002(boolean primeiraVez, Sessao sessao) {
		this.sessao = sessao;
		inicializar(primeiraVez);
	}

	public void inicializar(boolean primeiraVez) {
		if (primeiraVez) {
			versao = "0";
			operacao = "";
			dataCorrente = 0;
			Arrays.fill(numero, 0);
			Arrays.fill(ativo, "");
			Arrays.fill(userAtv, "");
			Arrays.fill(traco, "");
			Arrays.fill(opc, "");
			msg1 = "";
			msg2 = "";
			msg3 = "";
			empresa = "";
			nomeClasse = "";
			empresa = sessao.getSisgsisp().getEmpresa();
			operacao = sessao.getSisgsisp().getOperacao();
			versao = sessao.getSisgsisp().getVersao();
		}
		horaCorrente = new SimpleDateFormat("HH:mm:ss").format(Calendar.getInstance().getTime()); // *TIMX
	}

	public boolean receberTela(boolean primeiraVez, Result result) {
		// faz o tratamento das criticas necessarias para os dados da tela
		// recebida
		this.result = result;
		temMensagem = false;
		if (!primeiraVez) {
			return validar();
		} else {
			return true;
		}
	}

	public void enviarTela(boolean primeiraVez, Result result, String origem) {
		this.enviada = true;
		// rotina para enviar a tela
		// caso esteja setado valores para acoesFinais, executa as classes
		// correspondentes
		this.result = result;
		if (UtilBean.acoesFinais != null && !UtilBean.acoesFinais.isEmpty()) {
			UtilBean.processaAcao();
		} else {
			enviar(result, origem);
		}
	}

	public void enviar(Result result, String origem) {
		// redicionar para o jsp correspondente
		UtilBean.redireciona(pagina, result, origem);
	}

	public void enviarMensagem(String campo, String mensagem) {
		// formatar a mensagem de erro, posicionar no campo informa
		if (campo != null) {
			campofocus = campo;
		} else {
			campofocus = "";
		}
		this.mensagem = mensagem;
		temMensagem = true;
		// enviar(result, origem);
	}

	public boolean validar() {
		// validar os campos recebidos da tela
		UtilBean.funcao = this.funcao;
		ValidarFuncao();
		if (temMensagem) {
			return false;
		}
		ValidarMsg1();
		if (temMensagem) {
			return false;
		}
		ValidarOpc();
		if (temMensagem) {
			return false;
		}
		ValidarOperacao();
		if (temMensagem) {
			return false;
		}
		sessao.getSisgsisp().setEmpresa(this.empresa);
		sessao.getSisgsisp().setOperacao(this.operacao);
		sessao.getSisgsisp().setVersao(this.versao);
		return true;
	}

	private void ValidarFuncao() {
		// Consist�ncia F00funcao
		if (!UtilBean.funcao.equals(UtilBean.ctt_processa)) {
			enviarMensagem(null, "");
			return;
		}
	}

	private void ValidarOperacao() {
		// Consist�ncia F00OPERACAO
		switch (operacao) {
		case "SIS": {
			// REVER UtilBean.finalizar() ;
			break;
		}
		case "FIM": {
			// REVER x(); // CALL ???
			break;
		}
		case "CAD": {
			break;
		}
		case "MSG": {
			break;
		}
		default: {
			enviarMensagem(null, "");
			return;
		}
		}
	}

	private void ValidarOpc() {
		// Consist�ncia F00OPC
		int cont1;
		int cont2 = 0;
		for (cont1 = 1; cont1 <= 20; cont1++) {
			if (opc[cont1].trim().equals("")) {
				cont2 += 1;
			}
			if (!opc[cont1].trim().equals("") && userAtv[cont1].trim().equals("")) {
				enviarMensagem(null, "DESTINATARIO INVALIDO");
				return;
			}
		}
		if (cont2 == 20) {
			enviarMensagem(null, "SELECIONE DESTINATARIOS");
			return;
		}
	}

	private void ValidarMsg1() {
		// Consist�ncia F00MSG1
		if (msg1.trim().equals("") && msg2.trim().equals("") && msg3.trim().equals("")) {
			enviarMensagem(null, "CAMPO DE MENSAGEM EM BRANCO ");
			return;
		}
	}

	public String getVersao() {
		return versao;
	}

	public void setVersao(String versao) {
		this.versao = versao;
	}

	public String getOperacao() {
		return operacao;
	}

	public void setOperacao(String operacao) {
		this.operacao = operacao;
	}

	public int getDataCorrente() {
		return dataCorrente;
	}

	public void setDataCorrente(int dataCorrente) {
		this.dataCorrente = dataCorrente;
	}

	public String getMsg1() {
		return msg1;
	}

	public void setMsg1(String msg1) {
		this.msg1 = msg1;
	}

	public String getMsg2() {
		return msg2;
	}

	public void setMsg2(String msg2) {
		this.msg2 = msg2;
	}

	public String getMsg3() {
		return msg3;
	}

	public void setMsg3(String msg3) {
		this.msg3 = msg3;
	}

	public String getEmpresa() {
		return empresa;
	}

	public void setEmpresa(String empresa) {
		this.empresa = empresa;
	}

	public String getNomeClasse() {
		return nomeClasse;
	}

	public void setNomeClasse(String nomeClasse) {
		this.nomeClasse = nomeClasse;
	}

	public int[] getNumero() {
		return numero;
	}

	public void setNumero(int[] numero) {
		this.numero = numero;
	}

	public String[] getAtivo() {
		return ativo;
	}

	public void setAtivo(String[] ativo) {
		this.ativo = ativo;
	}

	public String[] getUseratv() {
		return userAtv;
	}

	public void setUseratv(String[] userAtv) {
		this.userAtv = userAtv;
	}

	public String[] getTraco() {
		return traco;
	}

	public void setTraco(String[] traco) {
		this.traco = traco;
	}

	public String[] getOpc() {
		return opc;
	}

	public void setOpc(String[] opc) {
		this.opc = opc;
	}

	public int getNumero(int index) {
		return numero[index];
	}

	public void setNumero(int index, int numero) {
		this.numero[index] = numero;
	}

	public String getAtivo(int index) {
		return ativo[index];
	}

	public void setAtivo(int index, String ativo) {
		this.ativo[index] = ativo;
	}

	public String getUseratv(int index) {
		return userAtv[index];
	}

	public void setUseratv(int index, String userAtv) {
		this.userAtv[index] = userAtv;
	}

	public String getTraco(int index) {
		return traco[index];
	}

	public void setTraco(int index, String traco) {
		this.traco[index] = traco;
	}

	public String getOpc(int index) {
		return opc[index];
	}

	public void setOpc(int index, String opc) {
		this.opc[index] = opc;
	}

	public String getHoraCorrente() {
		return horaCorrente;
	}

	public void setHoraCorrente(String horaCorrente) {
		this.horaCorrente = horaCorrente;
	}

	public String getFuncao() {
		return funcao;
	}

	public void setFuncao(String funcao) {
		this.funcao = funcao;
	}

	public String getCampofocus() {
		return campofocus;
	}

	public void setCampofocus(String campofocus) {
		this.campofocus = campofocus;
	}

	public String getNavegar() {
		return navegar;
	}

	public void setNavegar(String navegar) {
		this.navegar = navegar;
	}

	public String getMensagem() {
		return mensagem;
	}

	public void setMensagem(String mensagem) {
		this.mensagem = mensagem;
	}

	public void setMensagemSaida(String mensagem) {
		this.mensagem = mensagem;
	}

	public boolean getEnviada() {
		return this.enviada;
	}

	public void setSessao(Sessao sessao) {
		this.sessao = sessao;
	}
}
